package com.ylr.base.common.utils;

import com.ylr.base.common.exception.YlrException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.ThreadLocalRandom;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2022-04-27 20:01:19
 * className: RandomNumUtils 随机数工具类
 * version: 1.0
 * description:
 */
public class RandomNumUtils {

    private static final Logger log = LoggerFactory.getLogger(RandomNumUtils.class);

    /**
     * 获取一个随机的数值
     * 在该数字baseNum的基础上，随机增加1~randomNum秒，最终得到一个随机的1小时数值
     * @param baseNum 基数，单位秒
     * @param randNum 增加随机秒数的最大秒数，将会产生一个1~randomNum的数字
     * @return 随机数值
     */
    public static long randomNum(long baseNum, long randNum) {
        if (baseNum < 1) {
            log.error("生成自定义随机数参数错误。baseNum={}", baseNum);
            throw new YlrException("基数不能小于1！！");
        }
        if (randNum < 1) {
            log.error("生成自定义随机数参数错误。randNum={}", randNum);
            throw new YlrException("最大随机数不能小于1！");
        }
        // 获取随机数生成对象
        ThreadLocalRandom current = ThreadLocalRandom.current();

        // 1~randNum的随机数字，代表秒数[左闭右闭区间]
        long randomNum = current.nextLong(randNum) + 1;

        return baseNum + randomNum;
    }

    /**
     * 获取一个随机的五分钟零几秒的数值
     * 1、获取五分钟对应的秒数字
     * 2、并在该数字的基础上，随机增加1~randomNum秒，最终得到一个随机的五分钟数值
     * @param randNum 增加随机秒数的最大秒数，将会产生一个1~randomNum的数字
     * @return 一个五分钟零几秒的数值
     */
    public static long random5Minutes(int randNum) {
        if (randNum < 1) {
            log.error("生成自定义随机数参数错误。randNum={}", randNum);
            throw new YlrException("最大随机数不能小于1！");
        }
        // 获取随机数生成对象
        ThreadLocalRandom current = ThreadLocalRandom.current();

        // 五分钟转换成秒的数值
        long num = 300;
        // 1~randNum的随机数字，代表秒数[左闭右闭区间]
        long randomNum = current.nextLong(randNum) + 1;

        return num + randomNum;
    }

    /**
     * 获取随机六位数
     * @return 数值
     */
    public static String getRandomSixCode() {
        // 获取随机数生成对象
        ThreadLocalRandom current = ThreadLocalRandom.current();

        StringBuilder sb = new StringBuilder(6);
        for (int i = 0; i < 6; i++) {
            sb.append(current.nextInt(10));
        }
        return sb.toString();
    }

}
